# -*- coding: utf-8 -*-

import json
import types
import time
from tencentcloud.common import credential
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
from tencentcloud.hunyuan.v20230901 import hunyuan_client, models
import random, re
import concurrent.futures
import threading
import pandas as pd

    #https://cloud.tencent.com/document/product/1729/97730 实名认证，开通服务

try:
    # 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密
    # 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性
    # 以下代码示例仅供参考,建议采用更安全的方式来使用密钥
    # 请参见:https://cloud.tencent.com/document/product/1278/85305
    # 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取
    SecretId = "AKIDsfGfrqmW2LTO8f083mKgplUSDl6FBwVs"
    SecretKey = "DD0a3JLCrJYdWCi1U4SfhW9ctytdEFI9"

    cred = credential.Credential(SecretId, SecretKey)
    # 使用临时密钥示例
    # cred = credential.Credential("SecretId", "SecretKey", "Token")
    # 实例化一个http选项,可选的,没有特殊需求可以跳过
    httpProfile = HttpProfile()
    httpProfile.endpoint = "hunyuan.tencentcloudapi.com"

    # 实例化一个client选项,可选的,没有特殊需求可以跳过
    clientProfile = ClientProfile()
    clientProfile.httpProfile = httpProfile
    # 实例化要请求产品的client对象,clientProfile是可选的
    client = hunyuan_client.HunyuanClient(cred, "", clientProfile)

           
    #把提示词提取出来，执行前单独打印出来  
    prompt = f"1. 官方库（Apple Frameworks）\n定义：由苹果官方提供的 原生开发框架，深度集成 iOS 系统，功能覆盖 UI、网络、数据存储等核心领域。 特点：\n* 稳定性：与 iOS 系统版本同步更新，兼容性有保障。\n* 闭源性：仅提供头文件和二进制，无法查看源码。 典型示例：\n* UIKit：构建 iOS 界面的基础框架（如 UILabel、UIButton）。\n* CoreData：数据持久化框架，支持对象关系映射（ORM）。\n* AVFoundation：音视频处理框架（如录制、播放、滤镜）。\n\n2. 三方库（第三方框架）\n定义：由社区或第三方开发者开源或闭源提供的 功能扩展库，需通过 CocoaPods/Swift Package Manager 集成。 特点：\n* 开源生态：覆盖网络、图片处理、动画等高频需求。\n* 依赖管理：需声明版本，避免冲突。 典型示例：\n* Alamofire：网络请求库，简化 HTTP 调用。\n* SDWebImage：异步加载并缓存网络图片。\n* SnapKit：自动布局库，替代手动编写 Auto Layout 约束。\n\n3. 三方库（官方提供）\n定义：由 非苹果官方但具有权威性机构 提供的 SDK 或工具库，需通过特定方式集成到 iOS 项目中。 特点：\n* 跨平台性：可能支持 Android、Web 等多端。\n* 功能专一：聚焦特定领域（如支付、地图）。 典型示例：\n* 支付宝开放平台 SDK：提供支付、登录等能力。\n* 百度地图 SDK：集成地图渲染、定位功能。\n* Firebase SDK：谷歌提供的后端服务集成库。\n\n4. 私有库（Private Repository）\n定义：企业或团队内部维护的 非公开代码库，用于复用业务逻辑或敏感模块。 特点：\n* 安全性：代码不对外暴露，需通过 Git 私有仓库或私有 CocoaPods 仓库分发。\n* 定制化：可针对团队需求调整功能。 使用场景：\n* 复用登录模块、支付接口等核心业务代码。\n* 封装企业内部 API（如内部 CRM 系统）。 集成方式：\n# Podfile 中引用私有库\n\n5. 组件库（Component Library）\n定义：预构建的 UI 或功能模块集合，遵循统一设计规范，支持跨项目复用。 特点：\n* 一致性：确保全平台 UI 风格统一（如按钮、弹窗样式）。\n* 高效开发：通过配置化快速集成。 典型示例：\n* MaterialKit：Material Design 风格组件库。\n* 自定义图表库：封装 Charts 或 SwiftCharts 实现数据可视化。\n* 下拉刷新组件： MJRefresh\n\n6. 组件（Component）\n定义：软件中 独立、可复用 的最小功能单元，可能是 UI 元素或逻辑模块。 特点：\n* 高内聚：单一职责（如一个加载动画组件）。\n* 无状态：可动态替换或组合。 iOS 实现示例：\n* 自定义网络状态指示器：XXXNetworkIndicator\n* 自定义视图：XXXView\n* 表单验证组件：封装手机号、密码格式校验逻辑。\n\n"
            #打印提示词
    print(f"\n当前提示词:\n\n{prompt} \n 需要精准分类请补充提示词")

    checkName = ""
    #从targetSDK第一列中读取数据,检查是否是三方库,每读出一行就写到checkName中,然后调用API检查
    try:
        
        df = pd.read_excel('targetSDK.xlsx', dtype={'name': 'string', 'isThirdLib': 'string', 'HomePageLink': 'string'})
        # 修改后核心逻辑:
        
      
        # 初始化线程安全组件
        write_lock = threading.Lock()
        processed_count = 0
        
        def process_sdk(row):
            global processed_count
            checkName = row['name']
            if not checkName:
                return

            max_retries = 3
            retry_delay = 1
            
            for attempt in range(max_retries):
                try:
                    req = models.ChatCompletionsRequest()
                    params = {
                        "Model": "hunyuan-t1-latest",
                        "Messages": [{
                            "Role": "user",
                            "Content": f"{prompt}{checkName}属于哪个类型\n返回 libType:\n如果有官方链接或者github链接\n返回link:\n"
                        }]
                    }
                    req.from_json_string(json.dumps(params))
                    resp = client.ChatCompletions(req)
                    # 保持原有响应处理逻辑
                    #使用随机颜色print resp 的内容
                    colors = ['\033[31m', '\033[32m', '\033[33m', '\033[34m', '\033[35m', '\033[36m']
                    color = random.choice(colors)
                    print(f"{color}{checkName}\n{resp.to_json_string()}\033[0m")
                    
                    content = resp.Choices[0].Message.Content
                    json_match = re.search(r'```json\n(\{.*?\})\n```', content, re.DOTALL)
                    if json_match:
                        data = json.loads(json_match.group(1))
                        with write_lock:
                            df.loc[row.name, 'isThirdLib'] = data.get('libType')
                            df.loc[row.name, 'HomePageLink'] = data.get('link')
                            processed_count += 1
                            print(f"\r已完成: {processed_count}/{len(df)}", end='', flush=True)
                            break
                except Exception as e:
                    if attempt < max_retries - 1:
                        print(f"{checkName} 第{attempt+1}次重试中，{retry_delay}秒后重试...")
                        time.sleep(retry_delay)
                        retry_delay *= 2
                    else:
                        error_msg = f'{checkName} 最终失败: {str(e)}'
                        with write_lock:
                            df.loc[row.name, 'isThirdLib'] = '查询失败，请手动查询'
                            with open('error.log', 'a') as f:
                                f.write(f'{time.ctime()} - {error_msg}\n')
                        print(f"\n{error_msg}")
        
        # 创建线程池执行任务
        with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
            print("\n开始并发处理SDK检查...")
            executor.map(process_sdk, [row for _, row in df.iterrows() if row['name']])
            print("\n\n所有检查任务已完成！")
                        

        # 循环结束后统一写入
        try:
            with pd.ExcelWriter('targetSDK.xlsx', engine='openpyxl', mode='w') as writer:
                df.to_excel(writer, index=False, sheet_name='SDK List')
                print("所有数据已成功写入文件")
        except Exception as ex:
            print(f"文件写入失败: {str(ex)}")
            # 保留已处理的数据到临时文件
            df.to_excel('temp_SDK_backup.xlsx', index=False)
            print("已生成临时备份文件: temp_SDK_backup.xlsx")
    except FileNotFoundError:
        print("错误: targetSDK.xlsx 文件未找到")
        exit(1)
except TencentCloudSDKException as err:
    print(err)
